/**
 * @file：   	液力变矩器主控制器
 * @brief：  	青州山沃液力变矩器叉装车IO模块，使用24针控制器
 * @author：	张凤远
 * @date：   	2023年10月16日09:54:19
 * @version：	V1.00
 */
#include "User.h"
//--------GLOBAL_VAR----------
u8 APP_Type;
u8 TX_010[8], TX_011[8];
u8 RX_020[8];
u8 CAN_count;

//------------------------------配置硬件-------------------------------

void Config_Hardware(void)
{
	//@1-硬件-
	// 输入针脚配置
	ECU.PIN_12.Type = Type.Type1.DI; // 四轮转向模式开关
	ECU.PIN_13.Type = Type.Type1.DI; // 蟹行转向模式开关
	ECU.PIN_18.Type = Type.Type1.DI; // 前桥接近开关_1
	ECU.PIN_19.Type = Type.Type1.DI; // 刹车压力开关
	ECU.PIN_20.Type = Type.Type1.DI; // 后桥接近开关_1
	ECU.PIN_21.Type = Type.Type1.DI; //
	ECU.PIN_24.Type = Type.Type1.DI; //
	/*  输出针脚配置 */				 //
	ECU.PIN_7.DO = Type.Type3.DO;	 // 四轮转向阀
	ECU.PIN_8.DO = Type.Type3.DO;	 // 蟹行转向阀
	ECU.PIN_14.DO = Type.Type3.DO;	 // 前进挡换向阀
	ECU.PIN_15.DO = Type.Type3.DO;	 // 后退档换向阀
	ECU.PIN_16.DO = Type.Type3.DO;	 // 高低速电磁阀
	ECU.PIN_22.DO = Type.Type3.DO;	 // 发动机启动保护继电器

	//@2-CAN-
	ECU.CAN.Enable = 1;
	ECU.CAN.BaudRate = 250;
	//@3-RS232-
	ECU.RS232.Enable = 1;
	ECU.RS232.BaudRate = 115200;
}
//----------------------------配置CAN接收ID------------------------------
void Init_CAN_RX(void)
{
	can_receive_setting(0x020, CAN_ID_STD, 0, CAN_Filter_FIFO0);
}
//----------------------------主循环(基准10ms)---------------------------
void KOP_Cycle(void)
{
	
	APP_Type = 13;

	// 输出刷新
	ECU.PIN_7.DO = RX_020[0] & 1;
	ECU.PIN_8.DO = RX_020[0] >> 1 & 1;
	ECU.PIN_14.DO = RX_020[0] >> 2 & 1;
	ECU.PIN_15.DO = RX_020[0] >> 3 & 1;
	ECU.PIN_16.DO = RX_020[0] >> 4 & 1;
	ECU.PIN_22.DO = RX_020[0] >> 5 & 1;
	// printf("%d, %d, %d\n" ,ECU.EEPROM[1],SiLun_Fa, XieXing_Fa );

	TX_010[0] = APP_Type;
	TX_010[1] = 0;
	TX_010[2] = 0;
	TX_010[3] = 0;
	TX_010[4] = 0;
	TX_010[5] = 0;
	TX_010[6] = 0;
	TX_010[7] = 0;

	TX_011[0] = ECU.PIN_12.DI | ECU.PIN_13.DI << 1 | ECU.PIN_18.DI << 2 | ECU.PIN_19.DI << 3 | ECU.PIN_20.DI << 4 | ECU.PIN_21.DI << 5;
	TX_011[1] = 0;
	TX_011[2] = 0;
	TX_011[3] = 0;
	TX_011[4] = 0;
	TX_011[5] = 0;
	TX_011[6] = 0;
	TX_011[7] = 0;

	CAN_count++;
	if (CAN_count == 10)
	{
		Can_TX_Msg(0x010, 0, 8, TX_010);
		Can_TX_Msg(0x011, 0, 8, TX_011);
		CAN_count = 0;
	}
}
//---------------------------------CAN_RX--------------------------------
#if CAN_RX0_INT_ENABLE // 使能RX0中断
// 中断服务函数
void USB_LP_CAN1_RX0_IRQHandler(void)
{
	u8 CAN_RX_i;
	CanRxMsg RxMessage;
	while (CAN_MessagePending(CAN1, CAN_FIFO0) > 0)
	{
		CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);
		if (RxMessage.StdId == 0x020)
		{
			for (CAN_RX_i = 0; CAN_RX_i < 8; CAN_RX_i++)
			{
				RX_020[CAN_RX_i] = RxMessage.Data[CAN_RX_i];
			}
		}
	}
}
#endif
